www.gusucode.com > Connect RTL verification to MATLAB 程序工具箱matlab源码 > Connect RTL verification to MATLAB/pulse_detector_verification/MATLAB/comparePlot.m

    %
% Copyright 2019 The MathWorks, Inc.
%
function err_vec = compareData(reference,actual,figure_number,textstring)

% Vector input only
if ~isvector(reference) || ~isvector(actual)
    error('Input signals must be vector');
else
    if isrow(reference)
        reference = transpose(reference);
    end
    if isrow(actual)
        actual = transpose(actual);
    end
end

% Make signals same length if necessary
if length(reference) ~= length(actual)
%     warning(['Length of reference (%d) is not the same as actual signal (%d).'...
%         ' Truncating the longer input.'],length(reference),length(actual));
    len = 1:min(length(reference),length(actual));
    reference = reference(len);
    actual = actual(len);
end

% Turn complex into vector
if xor(isreal(reference),isreal(actual))
    error('Input signals are not both real or both complex');
elseif ~isreal(reference)
    ref_vec = double([real(reference) imag(reference)]);
    act_vec = double([real(actual) imag(actual)]);
    tag = {'(Real)','(Imag)'};
else
    ref_vec = double(reference);
    act_vec = double(actual);
    tag = {''};
end

% Configure figure
if iscell(figure_number)
    if size(ref_vec,2) > 1 % complex
        error('Cannot yet subplot multiple complex inputs');
    else
        figure(figure_number{1})
    end
else
    figure(figure_number)
end
c = get(groot,'defaultAxesColorOrder');

% Compute error
err_vec = ref_vec - act_vec;
max_err = max(abs(err_vec));
max_ref = max(abs(ref_vec));
fprintf('\nMaximum error for %s out of %d values\n',textstring,length(actual));


for n = 1:size(ref_vec,2)
    fprintf('%s %d (absolute), %d (percentage)\n',tag{n},max_err(n),max_err(n)/max_ref(n)*100);
    if iscell(figure_number)
        total_plot = figure_number{2};
        plot_num = figure_number{3};
    else
        total_plot = size(ref_vec,2);
        plot_num = n;
    end
    subplot(total_plot,1,plot_num)
    plot(ref_vec(:,n),'Color',c(3,:));
    hold on
    plot(act_vec(:,n),'Color',c(1,:));
    plot(err_vec(:,n),'Color',c(2,:));
    legend('Reference','Actual','Error')
    hold off
    title(sprintf('%s %s, max error = %.3d',textstring,tag{n},max_err(n)));
end
end